package org.kangjia.extend.dynamicFields;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 动态导出指定字段策略
 * @author ren
 * @description
 * @date 2022年07月03日 16:46:52
 */
public abstract class FieldList {

    List<String> fieldNameList = new ArrayList<String>();

    FieldList(List<String> fieldNames){
        this.fieldNameList = fieldNames;
    }

    FieldList(String[] fieldNames){
        this.fieldNameList = Arrays.asList(fieldNames);
    }

    /**
     * 添加黑白名单
     * @param fieldName
     * @return
     */
    abstract boolean add(String fieldName);

    /**
     * 设置校验白名单字段
     * @param fieldNames
     * @return
     */
    abstract boolean addAll(List<String> fieldNames);

    /**
     * 设置校验白名单字段
     * @param fieldNames
     * @return
     */
    abstract boolean addAll(String[] fieldNames);

    /**
     * 删除黑白名单
     * @param fieldName
     * @return
     */
    abstract boolean remove(String fieldName);

    /**
     * 清空黑白名单
     * @return
     */
    abstract void clear();

    /**
     * 执行动态导出筛选策略
     * @param list
     * @return
     */
    public final List<Field> executiveStrategy(List<Field> list){
        List<Field> fields = new ArrayList<Field>(list);
        for(Field field:fields){
            String fieldName = field.getName();
            if(!this.fieldNameList.contains(fieldName)){
                list.remove(field);
            }
        }
        return list;
    }
}
